package v1

import (
	"devops-super/api"
	"devops-super/internal/model/entity"
	"github.com/gogf/gf/v2/frame/g"
)

// ProductDeptConfigGetPageLstReq 分页获取部门产品配置列表请求
type ProductDeptConfigGetPageLstReq struct {
	g.Meta `method:"get" path:"/product-dept-config/page-list" summary:"分页获取部门产品配置列表" tags:"部门产品配置"`
	*api.PageLstReq
	ProductId int64  `json:"productId"  in:"query" description:"产品ID筛选"`
	DeptId    int64  `json:"deptId"     in:"query" description:"部门ID筛选"`
	GroupName string `json:"groupName"  in:"query" description:"配置组名筛选"`
}

// ProductDeptConfigGetPageLstRes 分页获取部门产品配置列表响应
type ProductDeptConfigGetPageLstRes struct {
	*api.PageLstRes[*entity.AppProductDeptConfig]
}

// ProductDeptConfigAddReq 新增部门产品配置请求
type ProductDeptConfigAddReq struct {
	g.Meta      `method:"post" path:"/product-dept-config" summary:"新增部门产品配置" tags:"部门产品配置"`
	ProductId   int64  `v:"required#产品ID不能为空" json:"productId"`
	DeptId      int64  `v:"required#部门ID不能为空" json:"deptId"`
	GroupName   string `v:"required#配置组名不能为空" json:"groupName"`
	ConfigKey   string `v:"required#配置键不能为空" json:"configKey"`
	ConfigValue string `v:"required#配置值不能为空" json:"configValue"`
	Remark      string `json:"remark" description:"备注"`
}

// ProductDeptConfigAddRes 新增部门产品配置响应
type ProductDeptConfigAddRes struct {}

// ProductDeptConfigUptReq 更新部门产品配置请求
type ProductDeptConfigUptReq struct {
	g.Meta      `method:"put" path:"/product-dept-config/{id}" summary:"更新部门产品配置" tags:"部门产品配置"`
	Id          int64  `v:"min:1#配置ID必须" path:"id"`
	ProductId   int64  `v:"required#产品ID不能为空" json:"productId"`
	DeptId      int64  `v:"required#部门ID不能为空" json:"deptId"`
	GroupName   string `v:"required#配置组名不能为空" json:"groupName"`
	ConfigKey   string `v:"required#配置键不能为空" json:"configKey"`
	ConfigValue string `v:"required#配置值不能为空" json:"configValue"`
	Remark      string `json:"remark" description:"备注"`
}

// ProductDeptConfigUptRes 更新部门产品配置响应
type ProductDeptConfigUptRes struct {}

// ProductDeptConfigDelReq 删除部门产品配置请求
type ProductDeptConfigDelReq struct {
	g.Meta `method:"delete" path:"/product-dept-config/{id}" summary:"删除部门产品配置" tags:"部门产品配置"`
	Id     int64 `v:"min:1#配置ID必须" path:"id"`
}

// ProductDeptConfigDelRes 删除部门产品配置响应
type ProductDeptConfigDelRes struct {}

// ProductDeptConfigGetOneReq 获取单条部门产品配置请求
type ProductDeptConfigGetOneReq struct {
	g.Meta `method:"get" path:"/product-dept-config/get-one" summary:"获取单条部门产品配置" tags:"部门产品配置"`
	Id     int64 `v:"min:1#配置ID必须" json:"id"`
}

// ProductDeptConfigGetOneRes 获取单条部门产品配置响应
type ProductDeptConfigGetOneRes struct {
	Info *entity.AppProductDeptConfig `json:"info"`
}

// ProductDeptConfigGetOptionsReq 获取部门产品配置选项请求
type ProductDeptConfigGetOptionsReq struct {
	g.Meta     `method:"get" path:"/product-dept-config/get-options" summary:"获取部门产品配置选项" tags:"部门产品配置"`
	ProductId  int64  `json:"productId" description:"产品ID筛选"`
	DeptId     int64  `json:"deptId" description:"部门ID筛选"`
	FieldKey   string `json:"fieldKey" description:"自定义value字段"`
	FieldLabel string `json:"fieldLabel" description:"自定义label字段"`
}

// ProductDeptConfigGetOptionsRes 获取部门产品配置选项响应
type ProductDeptConfigGetOptionsRes struct {
	Options []*api.FormOptionsItem `json:"options"`
}

// GetProductDeptGroupConfigsReq 获取部门产品配置组请求
type GetProductDeptGroupConfigsReq struct {
	g.Meta    `method:"get" path:"/product-dept-config/getGroupConfigs" summary:"获取部门产品配置组" tags:"部门产品配置"`
	ProductId int    `v:"min:1#产品ID必须" json:"productId" in:"query"`
	DeptId    int    `v:"min:1#部门ID必须" json:"deptId" in:"query"`
	GroupName string `v:"required#配置组名必须" json:"groupName" in:"query"`
}

// GetProductDeptGroupConfigsRes 获取部门产品配置组响应
type GetProductDeptGroupConfigsRes struct {
	Configs   []*entity.AppProductDeptConfig `json:"configs"`
	UpdatedAt string                         `json:"updatedAt"`
}

// SetProductDeptGroupConfigsReq 保存部门产品配置组请求
type SetProductDeptGroupConfigsReq struct {
	g.Meta    `method:"post" path:"/product-dept-config/setGroupConfigs" summary:"保存部门产品配置组" tags:"部门产品配置"`
	ProductId int    `v:"min:1#产品ID必须" json:"productId"`
	DeptId    int    `v:"min:1#部门ID必须" json:"deptId"`
	GroupName string `v:"required#配置组名必须" json:"groupName"`
	Configs   []struct {
		ConfigKey   string `v:"required#配置键必须" json:"configKey"`
		ConfigValue string `v:"required#配置值必须" json:"configValue"`
		ConfigDesc  string `json:"configDesc"`
	} `v:"required#配置项不能为空" json:"configs"`
}

// SetProductDeptGroupConfigsRes 保存部门产品配置组响应
type SetProductDeptGroupConfigsRes struct {}